﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 泛集合
{
    class Program
    {
        static List<Student> listStu = new List<Student>();
        static Hashtable ht = new Hashtable();
        static void Main(string[] args)
        {
            Student s1 = new Student(1,"张三", 18);
            Student s2 = new Student(2,"李四", 20);
            Student s3 = new Student(3,"王五", 19);
            listStu.Add(s1);
            listStu.Add(s2);
            listStu.Add(s3);
            ht.Add(s1.ID,s1);
            ht.Add(s2.ID, s2);
            ht.Add(s3.ID, s3);
            //添加3个类，分别实现 IComparer<T>接口，实现对Student类的三个字段的排序。
            //1、学生类：学号、姓名、年龄
            //2、请选择：1、添加学生信息；2、删除学生信息；3、查询学生信息。
            //3、重复的学号不能添加。
            //4、查询学生信息功能中有：1、查询所有（按学号排序）2、查询所有（按姓名排序），2、查询所有（按年龄排序）4、按学号查询（查没有，则打印查无此学生）5、退出
            Homepage();
            

        }

        private static void Homepage()
        {
            Console.WriteLine("请选择：1、添加学生信息；2、删除学生信息；3、查询学生信息。");
            int key = int.Parse(Console.ReadLine());
            switch (key)
            {
                case 1:
                    Add();
                    break;
                case 2:
                    Delete();
                    break;
                case 3:
                    Select();
                    break;

                default:
                    break;
            }
        }

        private static void Select()
        {
            Console.WriteLine("1、查询所有（按学号排序）2、查询所有（按姓名排序），2、查询所有（按年龄排序）4、按学号查询（查没有，则打印查无此学生）5、退出");
            int key = int.Parse(Console.ReadLine());
            switch (key)
            {
                case 1:
                    listStu.Sort(new IDSort());
                    foreach (Student item in listStu)
                    {
                        Console.WriteLine(item);
                    }
                    Homepage();
                    break;
                case 2:
                    listStu.Sort(new NameSort());
                    foreach (Student item in listStu)
                    {
                        Console.WriteLine(item);
                    }
                    Homepage();
                    break;
                case 3:
                    listStu.Sort(new AgeSort());
                    foreach (Student item in listStu)
                    {
                        Console.WriteLine(item);
                    }
                    Homepage();
                    break;
                case 4:
                    Console.Write("请输入你要查询信息的学号：");
                    int id = int.Parse(Console.ReadLine());
                    if (ht.ContainsKey(id))
                    {
                        Console.WriteLine(ht[id]);
                    }
                    else
                    {
                        Console.WriteLine("查无此学生！");
                        
                    }
                    Homepage();
                    break;
                case 5:
                    Environment.Exit(0);
                    break;

                default:
                    break;
            }
        }

        private static void Add()
        {
            Console.WriteLine("请输入你的学号：");
            int id = int.Parse(Console.ReadLine());
            if (ht.ContainsKey(id))
            {
                Console.WriteLine("学号重复！请重新输入！");
                Add();
            }
            else
            {
                Console.WriteLine("请输入你的名字：");
                string name =Console.ReadLine();
                Console.WriteLine("请输入你的年龄：");
                int age = int.Parse(Console.ReadLine());
                Student stu = new Student(id,name,age);
                listStu.Add(stu);
                ht.Add(stu.ID,stu);
                Homepage();
            }
        }

        private static void Delete()
        {
            Console.WriteLine("请输入你要删除学生信息的学号：");
            int id = int.Parse(Console.ReadLine());
            if (ht.ContainsKey(id))
            {
                Student stu = (Student)ht[id];
                ht.Remove(id);
                listStu.Remove(stu);
            }
            else
            {
                Console.WriteLine("查无此学生！");
            }
            Homepage();
        }

    }
}
